#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<sstream>
#include<cstring>
#include<string>
using namespace std;
const int N = 510;
bool g[N][N];
int dist[N];
int stop[N];
int n, m;
void bfs()
{
    memset(dist, 0x3f, sizeof dist);
    int hh = 0, tt = 0;
    int q[N];
    q[0] = 1;
    dist[1] = 0;
    while (hh <= tt)
    {
        int t = q[hh++];
        for (int i = 1; i <= n; i++)
        {
            if (g[t][i] && dist[i] > dist[t] + 1)
            {
                dist[i] = dist[t] + 1;
                q[++tt] = i;
            }
        }
    }
}
int main()
{
    cin >> m >> n;
    string s;
    getline(cin, s);
    while (m--)
    {
        getline(cin, s);
        stringstream ss(s);
        int cnt = 0, p;
        while (ss >> p) stop[cnt++] = p;
        for (int i = 0; i < cnt; i++)
        {
            for (int j = i + 1; j < cnt; j++) g[stop[i]][stop[j]] = true;
        }
    }
    bfs();
    if (dist[n] == 0x3f3f3f3f) cout << "NO" << endl;
    else cout << max(0, dist[n] - 1) << endl;
    return 0;
}